Packet-switched networks are used to transport data between computing devices. Typically, paths are formed over the packet-switched networks to communicatively connect devices together. The paths are made up of one or more links, with each link having a certain bandwidth capacity. The bandwidth capacity of each link may be divided for use by different classes of network services. For example, a certain amount of link bandwidth capacity may be allocated for a high-priority service class, and the remaining bandwidth may be allocated for a low-priority service class. Accordingly, network service providers are able to offer different levels of network services.
In existing networks, the amount of bandwidth allocated for each class of service is typically set at the time of initial link turn-up. Queue factors are generally used to set bandwidth allocations per class of service. For example, at the endpoints of each link, queues are configured to line up network traffic (e.g., service provisioning requests) for respective classes of service mapped to the queues. At link turn-up, the queues are assigned factors based on queue buffering rates, service level agreements, and forecasted demands for the respective classes of service. A scheduler uses the factors to weight the allocation of link bandwidth per class of service. Accordingly, the provisioning of network services associated with a particular class of service uses the bandwidth allocated for the class of service, as determined from queue factors, including queue weighting factors and other service and link parameters. In general, the allocated bandwidth is used as an upper limit to the amount of bandwidth allowed to be provisioned for a given class of service.
While traditional queuing techniques have improved link utilization efficiencies when actual service demands match forecasted demands, the static nature of queue factors can lead to network problems, including link failure, in particular circumstances. For example, when actual network service demands for a class of service vary from the forecasted demands used to determine queue factors, a given link may fail prematurely when the queue corresponding to the class of service becomes exhausted, even though there is sufficient bandwidth capacity in another queue, or a combination of other queues, to support the network service demands. Accordingly, overloading of any one queue associated with a particular class of service can cause a link to fail, even when bandwidth allocated for other classes of service is still available.
Moreover, traditional queuing techniques are typically applied globally to all links of a path or network, without considering the links on a link-by-link basis. Accordingly, bandwidth allocated for a class of service is usually the same for every link in a path or network. Because network services can usually be routed over more than one path, network links typically carry network traffic associated with communications between many different endpoints. In many situations, global allocation of bandwidth per service class is overly restrictive and does not provide link-by-link flexibility. For the reasons described above, link resources (e.g., bandwidth) often are not utilized efficiently, especially when, for any given link, actual network service demands differ from forecasted network service demands.